#pragma once

#define COMMON_ERROR (-1)
#define PRAAM_ERROR (-2);
#define SERIOUS_ERROR (-99)


typedef std::function<int(const QByteArray&)> Callback;

// 系统状态
enum class SystemStateType {
	system_state_idle = 1,
	system_state_work = 2,
	system_state_stop = 3,
};

// 组件定义
enum class Component {
	component_null = 0,
	component_sql,			// 数据库组件
	component_robot,		// 机械手组件
	component_camera,		// 相机组件
	component_systemInfo,		// 系统信息
	component_algorithm,	// 算法管理组件
	component_wcsrec,		// wcs消息处理组件 dep: 服务组件
	component_wcsSend,		// wcs消息发送组件

	component_stackPlate,		// 码垛托盘
	component_unstackPlate,		// 拆垛托盘
	component_plateStack,		// 托盘垛
	component_boxline,			// 输送

	component_alarmLight,		// 报警灯
	component_safeLocker,		// 安全锁
	component_safeDoor,			// 安全门
	component_grating,			// 光栅

	component_stackInfo,		// 垛形数据管理

	component_taskExcutor,		// 任务执行器组件 dep: wcsmsg、taskdb、step、
	component_stateSend,		// 状态发送组件
	component_max,
};

enum class ComponentEvent {
	system_event_stop = 1,		// 系统停止事件
	system_event_reset = 2,		// 系统复位事件
	system_event_start = 3,		// 系统启动事件
	system_event_Enter = 4,		// 请求进入事件
};


// 服务错误吗
enum  ServerErrorCode {
	server_process_err = -1,
	server_ok = 0,
	server_common_err,
	server_path_err,
	sever_data_err,
	server_method_err,
	server_cmd_err,
	server_grating_err,
};

/*******************************消息类型***********************************/
// WCS接收组件消息类型
enum class WCSMsgType {
	wcs_msg_task = 1,
	wcs_msg_plate_arrive,
	wcs_msg_plate_move,
	wcs_msg_boxline,
	wcs_msg_stackInfo,
	wcs_msg_max,
};

enum class GratingMsgType {
	grating_state_info = 1,
	grating_change_state = 2,

	grating_cmd_max,
};

// WCS发送组件消息类型
enum class WCSendType {
	wcs_send_null = 0,
	wcs_send_taskfinish = 1,	 // 任务完成
	wcs_send_arrive,			// 货物到达
	wcs_send_move,				// 货物移走
	wcs_send_request,			// 货物申请
	wcs_send_state,				 // 机械手状态


	wcs_send_max,
};

/*机械手消息类型*/
enum class RobotMsgType {
	robot_msg_DI = 1,
	robot_msg_DO = 2,
	robot_msg_point_id = 3,
	robot_msg_joints = 4,
	robot_msg_target = 5,
	robot_msg_max,
};
/*机械手命令类型*/
enum class RobotCmdType {
	robot_cmd_get_connect = 1,
	robot_cmd_get_target,
	robot_cmd_get_joints,
	robot_cmd_get_di,

	robot_cmd_reconnected,
	robot_cmd_set_do,
	robot_cmd_set_grip,
	robot_cmd_set_move,
	robot_cmd_max,
};

/*系统组件命令类型*/
enum class SystemCmdType {
	system_cmd_get_state = 1,
	system_cmd_system_stop,
	system_cmd_System_reset,
	system_cmd_System_start,
	robot_cmd_max,
};

